/**
 * 
 */
package org.stars.daostars.core.parser;

import org.stars.daostars.sqlmapper.SqlMapper;

/**
 * Analizza la definizione di un dao alla ricerca delle clausole incluse. Viene
 * invocato prima del SqlParser.
 * 
 * @author Francesco Benincasa (908099)
 * 
 */
public abstract class Preprocessor {

	/**
	 * Esegue il parsing di tutte le query di una definizionie.
	 * Nell'ordine vengono effettuate le seguenti operazioni:
	 * <ul>
	 * <li>Rimuove i commenti</li>
	 * <li>Rimuove gli spazi</li>
	 * <li>Preprocessa le query parent</li>
	 * <li>Preprocessa le query incluse</li>
	 * <li>Controlla le parentesi</li>
	 * </ul>
	 * 
	 * @param definition
	 * @return
	 * 		<code>true</code> se non ci sono dei problemi.
	 * @throws Exception
	 * 		in caso di errore
	 */
	public static boolean execute(SqlMapper definition) throws Exception
	{
		// toglie i commenti
		FindComment.execute(definition);
		
		// toglie gli spazi vuoti
		FindWhiteSpace.execute(definition);

		// toglie gli spazi vuoti dalla definizioni dei parametri
		FindWhiteSpaceInParameters.execute(definition);
		
		// risolve le query padre
		FindParentQuery.execute(definition);
		
		// risolve le sotto query
		FindSubQuery.execute(definition);
		
		// controlla le parentesi aperte
		VerifyParenthesis.execute(definition);
		
		// controlla le query di ordinamento
		VerifyOrderQueries.execute(definition);
		
		return true;
	}



}
